#ifndef _LIST_
#define _LIST_
typedef struct structListNode ListNode;
typedef struct structList List;

//! Defines a linked list node
struct structListNode
{
	//! A pointer to a block of memory
	void *Value;
	//! A pointer to the next node in the list
	struct structListNode *Next;
};

//! Defines a linked list object
struct structList
{
	//! Head of the list
	struct structListNode *Head;
	//! Pointer to the tail for a constant time append operation
	struct structListNode *Tail;

	void (*Append)(struct structList *list, void *value);
	void *(*GetByValue)(struct structList *list, void *value, unsigned int size, unsigned int offset);
};

List new_List(void);
void list_append(struct structList *list, void *value);
void *list_getbyvalue(struct structList *list, void *value, unsigned int size, unsigned int offset);

#endif
